package br.com.android.aluno.view;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import br.com.android.aluno.overlay.Coordenada;
import br.com.android.aluno.overlay.OverlayCustom;
import br.com.android.aluno.overlay.OverlayCustom.TipoOverlay;
import br.com.android.aluno.util.UtilMaps;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class MapaActivity extends MapActivity {

    public static final String INTENT_EXTRA_DATA_ENDERECO = "endereco";
	private MapView mapView = null;
	private MapController controller = null;
	private OverlayCustom overlay = null;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mapa);
        
        // Instancia o Mapa e o Controlador
		getController().setZoom(16);	
		
		// Mostra um controlador de zoom no mapa automaticamente
		getMapView().setBuiltInZoomControls(true); 

		// Adiciona o overlay no Mapa
		getMapView().getOverlays().add(getOverlay());
		
		// Obtem os dados vindos da Activity que a chamou
		Intent intent = getIntent();
		String enderecoStr = intent.getStringExtra(INTENT_EXTRA_DATA_ENDERECO);
		
		// Obtem os dados do aluno e preenche na tela
		if(enderecoStr != null){
			carregaDados(enderecoStr);
		}
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_mapa, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    	    	
		switch (item.getItemId()) {			
		case R.id.menu_mapa_satelite:	
			getMapView().setSatellite(true);
			getMapView().setStreetView(false);
			break;
			
		default:
			getMapView().setSatellite(false);
			getMapView().setStreetView(true);
			break;
		}
    	
    	return true;
    }
	
	private MapView getMapView(){
		if(mapView == null){
			mapView = (MapView) findViewById(R.id.mapa);
		}
		
		return mapView;
	}
	
	private MapController getController(){
		if(controller == null){
			controller = getMapView().getController();
		}
		
		return controller;
	}

    private void carregaDados(String enderecoStr) {
		Coordenada coordenada = UtilMaps.getGeoPointFromAddress(enderecoStr, getApplicationContext());
		
		if(coordenada == null){
			Log.i("aluno", "Endereco nao encontrado: " + enderecoStr);
			Toast.makeText(getApplicationContext(), "Endereco nao encontrado!", Toast.LENGTH_SHORT).show();
			finish();
			return;
		}
			
		Log.i("aluno", "Endereco: " + enderecoStr);
		Log.i("aluno", "Coordenada: " + coordenada.getLatitudeE6() + ", " + coordenada.getLongitudeE6());
		
		getOverlay().setGeoPoint(coordenada); //atualiza a coordenada da bolinha
		getController().animateTo(coordenada); //centraliza o mapa no ponto
		getMapView().invalidate(); //invalida o mapa para desenhar tudo novamente (eh tipo um refresh)
	}

    public OverlayCustom getOverlay() {
    	if(overlay == null){
//    		overlay = new OverlayCustom(null);
    		overlay = new OverlayCustom(null, R.drawable.iconr, TipoOverlay.IMAGEM);
    	}
		return overlay;
	}

	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
}
